// Decompiled by DJ v3.11.11.95 Copyright 2009 Atanas Neshkov  Date: 22/03/2011 12:25:35 p.m.
// Home Page: http://members.fortunecity.com/neshkov/dj.html  http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   PedidoFormValidator.java

package com.luxsoft.sw3.impap.ui.form;

import com.jgoodies.validation.ValidationResult;
import com.jgoodies.validation.util.PropertyValidationSupport;
import com.luxsoft.siipap.cxc.model.FormaDePago;
import com.luxsoft.siipap.model.Direccion;
import com.luxsoft.siipap.model.core.Cliente;
import com.luxsoft.siipap.model.core.ClienteCredito;
import com.luxsoft.sw3.ventas.Pedido;
import java.math.BigDecimal;
import org.apache.commons.lang.StringUtils;

public class PedidoFormValidator
{

    public PedidoFormValidator()
    {
    }

    public void validate(Pedido pedido, PropertyValidationSupport support)
    {
        setPedido(pedido);
        Cliente c = getPedido().getCliente();
    }

    private void validarFormaDePago(PropertyValidationSupport support)
    {
        Cliente c = getPedido().getCliente();
        if(FormaDePago.CHEQUE_POSTFECHADO.equals(getPedido().getFormaDePago()))
        {
            if(c != null && c.isDeCredito() && !c.getCredito().isChequePostfechado())
                support.getResult().addError("A este cliente no se le permite cheque post - fechado");
            if(!getPedido().isDeCredito())
                support.getResult().addError("No se permite Cheque post fechado en contado");
        } else
        if(FormaDePago.CHEQUE.equals(getPedido().getFormaDePago()) && c != null && !c.isPermitirCheque())
            support.getResult().addError("A este cliente no se le permite cheque ");
    }

    private void validarFormaDeEnvio(PropertyValidationSupport support)
    {
        if(getPedido().getEntrega().name().startsWith("ENVIO"))
        {
            if(getPedido().getInstruccionDeEntrega() == null)
                support.getResult().addError("Debe definir la direcci\363n de envio");
        } else
        if(com.luxsoft.sw3.ventas.Pedido.FormaDeEntrega.ENVIO_CARGO.equals(getPedido().getEntrega()) && getPedido().getFlete().doubleValue() <= 0.0D)
            support.getResult().addError("El tipo de envio con cargo no aplica para la poblaci\363n/estado definidos");
    }

    private void validarCondicionesDeCredito(PropertyValidationSupport support)
    {
        Cliente c = getPedido().getCliente();
        if(c == null)
            return;
        if(!c.isDeCredito())
        {
            support.getResult().addError("El cliente no tiene l\355nea de cr\351dito");
            return;
        }
        if(c.getCredito().isSuspendido())
            support.getResult().addError("Cr\351dito suspendido temporalmente ");
        if(c.getCredito().getCreditoDisponible().doubleValue() < getPedido().getTotal().doubleValue())
            support.getResult().addError("L\355nea de cr\351dito SATURADA");
        if(c.getCredito().getAtrasoMaximo() > 15)
            support.getResult().addError("El cliente tiene un atraso superior a 15 dias (Llamar a Cr\351dito)");
    }

    private void validarDireccion(PropertyValidationSupport support)
    {
        if(getPedido().getEntrega().equals(com.luxsoft.sw3.ventas.Pedido.FormaDeEntrega.LOCAL))
            return;
        if(getPedido().getCliente() != null)
        {
            Cliente c = getPedido().getCliente();
            if("1".equals(c.getClave()))
                return;
            if(c.getDireccionFiscal() != null)
            {
                Direccion d = c.getDireccionFiscal();
                if(StringUtils.isBlank(d.getCalle()) || StringUtils.isBlank(d.getCp()) || StringUtils.isBlank(d.getColonia()))
                    support.getResult().addError("Direccion incorrecta");
            } else
            {
                support.getResult().addError("La direcci\363n del cliente no puede ser nula");
            }
        }
    }

    public Pedido getPedido()
    {
        return pedido;
    }

    public void setPedido(Pedido pedido)
    {
        this.pedido = pedido;
    }

    private Pedido pedido;
}
